@auto[]
$sWorkingDir[^file:dirname[$request:uri]]
$sCurrentFile[^file:basename[$request:uri]]

$request:charset[UTF-8]
$response:charset[UTF-8]
$response:content-type[
	$.value[text/html]
	$.charset[$response:charset]
]


$hAntiSpamParams[
	^rem{ *** каталог, где будут hashfile и log. должен быть вне веб пространства. по умолчанию -- /../temp *** }
#	$.sDataDir[/../temp]

	^rem{ *** что пишем в log файл. подробнее про константы можно посмотреть в переменной класса LOG_MASK *** }
	$.iLogAccess(1+2+16+32)

	$.hExpires[
		^rem{ *** на сколько баним спамера (в днях). по умолчанию -- 0 (не баним) *** }
		$.dBan(1/24)
	]

	$.hReferer[
		^rem{ *** запрещать работу с пустым referer. по умолчанию -- false, т.е. работа с пустым referer разрешена *** }
#		$.bRefuseEmpty(true)

		^rem{ *** список разрешённых referer при отображения формы *** }
		$.print[^table::create{sHref^#0Ahttp://${env:SERVER_NAME}$sWorkingDir/$sCurrentFile}]
		^rem{ *** список разрешённых referer при обработке submt-а формы *** }
		$.exec[^table::create{sHref^#0Ahttp://${env:SERVER_NAME}$sWorkingDir/$sCurrentFile}]
	]

#	$.hFields[
		^rem{ *** при отображении формы будем ругаться, если в form будут обнаружены не упомянутые в <form/> поля. по умолчанию -- true *** }
#		$.bRefuseUnknown(true)
		^rem{ *** но мы можем перечислить не упомянутые в <form/> поля, которым разрешено приходить в form, хотя они отсутствуют в <form/> *** }
#		$.tAllowed[^table::create{sName^#0Arequest^#0Alang}]
#	]

	$.hFilter[
		^rem{ *** порог срабатывания защиты *** }
		$.dThreshold(20)
		^rem{ *** список фильтров и их весов, которыми проверяются все поля формы при submit-е данных *** }
		$.tMask[^table::create{dScore	sRegexp
1	<a href=[^^>]+>
3	\sWMZ\s
3	Z\d{12}
}]
	]

	^rem{ *** дополнительное поле с uid будет добавляться с указанными параметрами *** }
#	$.hUid[
#		$.sTag[input]
#		$.sName[uid]
#	]

	^rem{ *** модифицирование action формы *** }
	$.hAction[
#		$.sType[hidden]
		^rem{ *** настоящая кнопка action должна быть обязательно нажата (нельзя постить форму нажатием Enter-а в текстовом поле). по умолчанию -- true *** }
#		$.bRealRequired(true)

		^rem{ *** первый action всегда будет фиктивным. по умолчанию -- true *** }
#		$.bFakeFirst(true)

		^rem{ *** сколько фиктивных кнопок будет добавлено. по умолчанию 0, т.е. фиктивных кнопок добавлено не будет *** }
		$.iFakeCount(3)

		^rem{ *** эти атрибуты будут добавлены к настоящему submit-у *** }
		^rem{ *** тут вы можете использовать junction: $.value{^method[]} *** }
		$.hRealAttr[
			$.class[real]
			$.value[[+]]
		]

		^rem{ *** а эти атрибуты будут добавлены к фиктивным submit-полям *** }
		$.hFakeAttr[
			$.class[fake]
			$.value[[-]]
		]
	]

	^rem{ *** ************************************************************************************ *** }
	^rem{ *** далее идут параметры, нужные классам AntispamTuringMath и/или AntispamTuringCaptcha  *** }

	^rem{ *** в поле form с этим именем будет ожидать получения от пользователя результата теста Тюринга. по умолчанию -- "result" *** }
#	$.sTuringAnswerFieldName[result]

	^rem{ *** каталог, в котором лежат изображения с символами, участвующими в генерации капчи. обязательный параметр *** }
	^rem{ *** этот каталог НЕЛЬЗЯ класть в веб пространство (а если кладёте, то запретите к нему доступ в .htaccess) *** }
	^rem{ *** в каталоге должен быть набор подкаталогов из одного символа. эти символы автоматически будут участвовать в генерации капчи *** }
	^rem{ *** в каждом подкаталоге может быть произвольное число gif файлов. *** }
	^rem{ *** при генерации очередного символа капчи будет использоваться случайный файл *** }
	$.sImageDir[/../data/captcha]

	^rem{ *** количество символов в капче. по умолчанию -- 5 *** }
#	$.iLimit(5)

	^rem{ *** размер изображения капчи. по умолчанию -- 300x25px *** }
#	$.iCaptchaImageWidth(300)
#	$.iCaptchaImageHeight(25)

	^rem{ *** межсимвольное расстояние, px. по умолчанию -- 5 *** }
#	$.iSpaceWidth(5)

	^rem{ *** таблица с используемыми цветами символов. пустая таблица -- не производить замены цветов *** }
#	$.tColor[^table::creare{iColor}]

	^rem{ *** "плотность" шумов в изображении. 0 -- не добавлять шум. по умолчанию -- 30 (каждая 30 точка -- шум) *** }
#	$.iNoiseDensity(30)

	^rem{ *** обрезать изображение по ширине. по умолчанию -- true *** }
#	$.bCropWidth(true)

	^rem{ *** на сколько смещать символы при создании капчи, px. 0 -- не смещать. по умолчанию максимум на 2px в каждую сторону *** }
#	$.iShiftX(2)
#	$.iShiftY(2)
]
#end @auto[]



###########################################################################
@head[]
<head>
<style><!--
input.fake { display: none; }
//--></style>
</head>
#end @head[]



###########################################################################
@bye[]
<p>Привет, спамер.
<br />Этим сообщением уведомляем, что вы очень желанный гость <a href="http://lleo.aha.ru/na/">здесь</a>.</p>
#$response:status(404)
#end @bye[]



###########################################################################
@check[]
^if(!def $form:name || !def $form:result){
	^throw[check.fields;]
}
#end @check[]



